import axios, {
  InternalAxiosRequestConfig,
  AxiosResponse,
  AxiosHeaders,
} from 'axios';
import Cfg from '@/config';

import {useSystemStore} from '@/stores';

const $http = axios.create({
  baseURL: Cfg.url, // 请求URL前缀
  timeout: 5000, // 超时
  responseType: 'json', // 返回数据格式
  withCredentials: false, // 表示跨域请求时是否需要使用凭证，即cookie等验证信息。参考：https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials
});

// 添加【请求】拦截器
$http.interceptors.request.use(
  async (config: InternalAxiosRequestConfig) => {
    config.baseURL = import.meta.env.VITE_APP_BASE_URL;

    const language = useSystemStore.getState().state.lang;

    config.headers = new AxiosHeaders({
      'Content-Type': 'application/json; charset=utf-8',
      'X-Requested-With': 'XMLHttpRequest',
      'Accept-Language': language?.toLocaleLowerCase() || 'zh-cn',
    });

    config.data = JSON.stringify(config.data); // 序列化后的 JSON 字符串.
    return config;
  },
  () => {
    // 对请求错误做些什么
    return Promise.reject();
  },
);

// 添加【响应】拦截器
$http.interceptors.response.use(
  // 对响应数据做点什么
  (response: AxiosResponse) => {
    return response.data; // 返回response的data值
  },

  // 对响应错误做点什么
  () => {
    return Promise.reject();
  },
);

export default $http;
